package com.jackstraw.jack_base.datasource.jpa.base.dao.database;

import com.jackstraw.jack_base.datasource.database.parten.base.dao.BaseDao;
import com.jackstraw.jack_base.datasource.jpa.base.entity.Query;
import com.jackstraw.jack_base.datasource.jpa.base.entity.po.JpaPo;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.NoRepositoryBean;

import javax.persistence.EntityManager;
import java.util.List;

/**
 * JPA数据持久层
 *
 * @param <PO> 实体类
 * @param <ID> 主键
 */
@NoRepositoryBean
public interface JpaDao<PO extends JpaPo<PO, ID>, ID>
        extends JpaRepository<PO, ID>, BaseDao<PO> {


    EntityManager entityManager();

    /**
     * 更新
     *
     * @param entity
     * @return
     */
    <PO> PO update(PO entity);

    /**
     * 批量更新
     *
     * @param entities
     * @return
     */
    <PO> List<PO> updateAll(Iterable<PO> entities);

    /**
     * 通过query查询数量
     *
     * @param query
     * @return
     */
    <PO> Long countByQuery(Query<PO> query);

    /**
     * 通过query查询
     *
     * @param query
     * @return
     */
    <PO> List<PO> query(Query<PO> query);
}
